<?php

class SubPages {

    private $each_disNums; //每页显示的条目数   
    private $nums; //总条目数   
    private $current_page; //当前被选中的页   
    private $sub_pages; //每次显示的页数   
    private $pageNums; //总页数   
    private $page_array = array(); //用来构造分页的数组   
    private $subPage_link; //每个分页的链接   
    private $subPage_type; //显示分页的类型   

    /*
      __construct是SubPages的构造函数，用来在创建类的时候自动运行.
      @$each_disNums   每页显示的条目数
      @nums     总条目数
      @current_num     当前被选中的页
      @sub_pages       每次显示的页数
      @subPage_link    每个分页的链接
      @subPage_type    显示分页的类型

      当@subPage_type=1的时候为普通分页模式
      example：   共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
      当@subPage_type=2的时候为经典分页样式
      example：   当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */

    function __construct($each_disNums, $nums, $current_page, $sub_pages, $subPage_type, $subPage_link='') {
        $this->each_disNums = intval($each_disNums);
        $this->nums = intval($nums);
        if (!$current_page) {
            $this->current_page = 1;
        } else {
            $this->current_page = intval($current_page);
        }
        $this->sub_pages = intval($sub_pages);
        $this->pageNums = ceil($nums / $each_disNums);
        $this->subPage_link = $subPage_link;
        $this->show_SubPages($subPage_type);
        //echo $this->pageNums."--".$this->sub_pages; 
    }

    /*
      __destruct析构函数，当类不在使用的时候调用，该函数用来释放资源。
     */

    function __destruct() {
        unset($each_disNums);
        unset($nums);
        unset($current_page);
        unset($sub_pages);
        unset($pageNums);
        unset($page_array);
        unset($subPage_link);
        unset($subPage_type);
    }

    /*
      show_SubPages函数用在构造函数里面。而且用来判断显示什么样子的分页
     */

    function show_SubPages($subPage_type) {
        if ($subPage_type == 1) {
            $this->subPageCss1();
        } elseif ($subPage_type == 2) {
            $this->subPageCss2();
        } elseif ($subPage_type == 3) {
            $this->subPageCss3();
        } elseif ($subPage_type == 4) {
            $this->subPageCss4();
        } elseif ($subPage_type == 5) {
            $this->subPageCss5();
        } elseif ($subPage_type == 6) {
            $this->subPageCss6();
        } elseif ($subPage_type == 7) {
            $this->subPageCss7();
        }
    }

    /*
      用来给建立分页的数组初始化的函数。
     */

    function initArray() {
        for ($i = 0; $i < $this->sub_pages; $i++) {
            $this->page_array[$i] = $i;
        }
        return $this->page_array;
    }

    /*
      construct_num_Page该函数使用来构造显示的条目
      即使：[1][2][3][4][5][6][7][8][9][10]
     */

    function construct_num_Page() {
        if ($this->pageNums < $this->sub_pages) {
            $current_array = array();
            for ($i = 0; $i < $this->pageNums; $i++) {
                $current_array[$i] = $i + 1;
            }
        } else {
            $current_array = $this->initArray();
            if ($this->current_page <= 3) {
                for ($i = 0; $i < count($current_array); $i++) {
                    $current_array[$i] = $i + 1;
                }
            } elseif ($this->current_page <= $this->pageNums && $this->current_page > $this->pageNums - $this->sub_pages + 1) {
                for ($i = 0; $i < count($current_array); $i++) {
                    $current_array[$i] = ($this->pageNums) - ($this->sub_pages) + 1 + $i;
                }
            } else {
                for ($i = 0; $i < count($current_array); $i++) {
                    $current_array[$i] = $this->current_page - 2 + $i;
                }
            }
        }

        return $current_array;
    }

    /*
      构造普通模式的分页
      共4523条记录,每页显示10条,当前第1/453页 [首页] [上页] [下页] [尾页]
     */

    function subPageCss1() {
        $subPageCss1Str = "";
        //$subPageCss1Str.="共".$this->nums."条记录，";
        //$subPageCss1Str.="每页显示".$this->each_disNums."条，";
        //$subPageCss1Str.="当前第" . $this->current_page . "/" . $this->pageNums . "页 ";
		 $query = $this->get_query_string("p");
        if ($query){
            $this->subPage_link = $_SERVER[PHP_SELF] . "?" . $query . "&p=";
		}else{
            $this->subPage_link = $_SERVER[PHP_SELF] . "?p=";
		}
        if ($this->current_page > 1) {
            $firstPageUrl = $this->subPage_link . "1";
            $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
            $subPageCss1Str.="<li><a href='$firstPageUrl' data-theme='c'>首页</a></li> ";
            $subPageCss1Str.="<li><a href='$prewPageUrl' data-theme='c'>上一页</a></li> ";
        } else {
            $subPageCss1Str.="<li><a href='#' data-theme='c'>首页</a> ";
            $subPageCss1Str.="<li><a href='#' data-theme='c'>上一页</a> ";
        }

        if ($this->current_page < $this->pageNums) {
            $lastPageUrl = $this->subPage_link . $this->pageNums;
            $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
            $subPageCss1Str.=" <li><a href='$nextPageUrl' data-theme='c'>下一页</a></li> ";
            $subPageCss1Str.="<li><a href='$lastPageUrl' data-theme='c'>尾页</a></li> ";
        } else {
            $subPageCss1Str.="<li><a href='#' data-theme='c'>下一页</a></li> ";
            $subPageCss1Str.="<li><a href='#' data-theme='c'>尾页</a></li> ";
        }

        $this->url = $subPageCss1Str;
    }

    /*
      构造经典模式的分页
      当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */

    function subPageCss2() {
        $query = $this->get_query_string("p");
        if ($query)
            $this->subPage_link = $_SERVER[PHP_SELF] . "?" . $query . "&p=";
        else
            $this->subPage_link = $_SERVER[PHP_SELF] . "?p=";
        $subPageCss2Str = "";
        //$subPageCss2Str.="当前第".$this->current_page."/".$this->pageNums."页 ";   

        if ($this->current_page > 1) {
            $firstPageUrl = $this->subPage_link . "1";
            $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
            $subPageCss2Str.="<a href='$firstPageUrl' class='fy' onfocus='this.blur();'>首页</a> ";
            $subPageCss2Str.="<a href='$prewPageUrl' class='fy' onfocus='this.blur();'>上一页</a> ";
        } else {
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>首页</a> ";
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>上一页</a> ";
        }

        $a = $this->construct_num_Page();
        for ($i = 0; $i < count($a); $i++) {
            $s = $a[$i];
            if ($s == $this->current_page) {
                $subPageCss2Str.="<span onfocus='this.blur();'>" . $s . "</span>";
            } else {
                $url = $this->subPage_link . $s;
                $subPageCss2Str.="<a href='$url' class='fy' onfocus='this.blur();'>" . $s . "</a>";
            }
        }

        if ($this->current_page < $this->pageNums) {
            $lastPageUrl = $this->subPage_link . $this->pageNums;
            $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
            $subPageCss2Str.=" <a href='$nextPageUrl' class='fy' onfocus='this.blur();'>下一页</a> ";
            $subPageCss2Str.="<a href='$lastPageUrl' class='fy' onfocus='this.blur();'>尾页</a> ";
        } else {
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>下一页</a> ";
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>尾页</a> ";
        }
        $this->url = $subPageCss2Str;
    }

    /*
      构造经典模式的无刷新分页
      当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */

    function subPageCss3() {
        $query = $this->get_query_string("p");
        if ($query)
            $this->subPage_link = $_SERVER[PHP_SELF] . "?" . $query . "&p=";
        else
            $this->subPage_link = $_SERVER[PHP_SELF] . "?p=";
        $subPageCss2Str = "";
        $subPageCss2Str.="当前第" . $this->current_page . "/" . $this->pageNums . "页 ";


        if ($this->current_page > 1) {
            $firstPageUrl = $this->subPage_link . "1";
            $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
            $subPageCss2Str.="<a href=\"javascript:load('$firstPageUrl')\">首页</a> ";
            $subPageCss2Str.="<a href=\"javascript:load('$prewPageUrl')\">上一页</a> ";
        } else {
            $subPageCss2Str.="首页 ";
            $subPageCss2Str.="上一页 ";
        }

        $a = $this->construct_num_Page();
        for ($i = 0; $i < count($a); $i++) {
            $s = $a[$i];
            if ($s == $this->current_page) {
                $subPageCss2Str.="<span style='font-weight:bold;'> " . $s . " </span>";
            } else {
                $url = $this->subPage_link . $s;
                $subPageCss2Str.="<a href=\"javascript:load('$url')\">" . $s . "</a>";
            }
        }

        if ($this->current_page < $this->pageNums) {
            $lastPageUrl = $this->subPage_link . $this->pageNums;
            $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
            $subPageCss2Str.=" <a href=\"javascript:load('$nextPageUrl')\">下一页</a> ";
            $subPageCss2Str.="<a href=\"javascript:load('$lastPageUrl')\">尾页</a> ";
        } else {
            $subPageCss2Str.="下一页 ";
            $subPageCss2Str.="尾页 ";
        }
        $this->url = $subPageCss2Str;
    }

    /*
      构造经典模式的无刷新分页
      当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */

    function subPageCss4() {
        $query = $this->get_query_string("p");
        if ($query)
            $this->subPage_link = $_SERVER[PHP_SELF] . "?" . $query . "&p=";
        else
            $this->subPage_link = $_SERVER[PHP_SELF] . "?p=";
        $subPageCss2Str = "";
        //$subPageCss2Str.="当前第".$this->current_page."/".$this->pageNums."页 ";   


        if ($this->current_page > 1) {
            $firstPageUrl = $this->subPage_link . "1";
            $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
            $subPageCss2Str.="<a class='fy' onfocus='this.blur();' href=\"javascript:load_a('$prewPageUrl')\">&lt;</a> ";
        } else {
            //$subPageCss2Str.="&lt;"; 
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>&lt;</a> ";
        }

        $a = $this->construct_num_Page();
        for ($i = 0; $i < count($a); $i++) {
            $s = $a[$i];
            if ($s == $this->current_page) {
                $subPageCss2Str.="<span class='fy2' onfocus='this.blur();'>" . $s . "</span>";
            } else {
                $url = $this->subPage_link . $s;
                $subPageCss2Str.="<a href=\"javascript:load_a('$url')\" class='fy' onfocus='this.blur();'>" . $s . "</a>";
            }
        }

        if ($this->current_page < $this->pageNums) {
            $lastPageUrl = $this->subPage_link . $this->pageNums;
            $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
            $subPageCss2Str.=" <a href=\"javascript:load_a('$nextPageUrl')\" class='fy' onfocus='this.blur();'>&gt;</a> ";
        } else {
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>&gt;</a> ";
            //$subPageCss2Str.="&gt;"; 
        }
        $this->url = $subPageCss2Str;
    }

    /*
      构造经典模式的无刷新分页
      当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */

    function subPageCss5() {
        $query = $this->get_query_string("p");
        if ($query)
            $this->subPage_link = $_SERVER[PHP_SELF] . "?" . $query . "&p=";
        else
            $this->subPage_link = $_SERVER[PHP_SELF] . "?p=";
        $subPageCss2Str = "";
        //$subPageCss2Str.="当前第".$this->current_page."/".$this->pageNums."页 ";   


        if ($this->current_page > 1) {
            $firstPageUrl = $this->subPage_link . "1";
            $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
            $subPageCss2Str.="<a class='fy' onfocus='this.blur();' href=\"javascript:load_o('$prewPageUrl')\">&lt;</a> ";
        } else {
            //$subPageCss2Str.="&lt;"; 
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>&lt;</a> ";
        }

        $a = $this->construct_num_Page();
        for ($i = 0; $i < count($a); $i++) {
            $s = $a[$i];
            if ($s == $this->current_page) {
                $subPageCss2Str.="<span class='fy2' onfocus='this.blur();'>" . $s . "</span>";
            } else {
                $url = $this->subPage_link . $s;
                $subPageCss2Str.="<a href=\"javascript:load_o('$url')\" class='fy' onfocus='this.blur();'>" . $s . "</a>";
            }
        }

        if ($this->current_page < $this->pageNums) {
            $lastPageUrl = $this->subPage_link . $this->pageNums;
            $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
            $subPageCss2Str.=" <a href=\"javascript:load_o('$nextPageUrl')\" class='fy' onfocus='this.blur();'>&gt;</a> ";
        } else {
            $subPageCss2Str.="<a href='#' class='fy' onfocus='this.blur();'>&gt;</a> ";
            //$subPageCss2Str.="&gt;"; 
        }
        $this->url = $subPageCss2Str;
    }

    /*
      构造经典模式的分页
      当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */

    function subPageCss6() {
        $query = $this->get_query_string("p");
        if ($query)
            $this->subPage_link = str_replace('index.php', '', $_SERVER[PHP_SELF]) . "?" . $query . "&p=";
        else
            $this->subPage_link = str_replace('index.php', '', $_SERVER[PHP_SELF]) . "?p=";
        $subPageCss2Str = "";
        //$subPageCss2Str.="当前第".$this->current_page."/".$this->pageNums."页 ";


        if ($this->current_page > 1) {
            $firstPageUrl = $this->subPage_link . "1";
            $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
            $subPageCss2Str.="<a href='$firstPageUrl' onfocus='this.blur();'>首页</a> ";
            $subPageCss2Str.="<a id='previous_page' href='$prewPageUrl' onfocus='this.blur();'>上一页</a> ";
        } else {
            $subPageCss2Str.="<a href='#' onfocus='this.blur();'>首页</a> ";
            $subPageCss2Str.="<a id='previous_page' href='#' onfocus='this.blur();'>上一页</a> ";
        }

        $a = $this->construct_num_Page();
        for ($i = 0; $i < count($a); $i++) {
            $s = $a[$i];
            if ($s == $this->current_page) {
                $subPageCss2Str.="<strong>" . $s . "</strong>";
            } else {
                $url = $this->subPage_link . $s;
                $subPageCss2Str.="<a href='$url' onfocus='this.blur();'>" . $s . "</a>";
            }
        }

        if ($this->current_page < $this->pageNums) {
            $lastPageUrl = $this->subPage_link . $this->pageNums;
            $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
            $subPageCss2Str.=" <a id='next_page' href='$nextPageUrl' onfocus='this.blur();'>下一页</a> ";
            $subPageCss2Str.="<a href='$lastPageUrl' onfocus='this.blur();'>尾页</a> ";
        } else {
            $subPageCss2Str.="<a id='next_page' href='#' onfocus='this.blur();'>下一页</a> ";
            $subPageCss2Str.="<a href='#' onfocus='this.blur();'>尾页</a> ";
        }
        $this->url = $subPageCss2Str;
    }

    /*
      构造经典模式的分页
      当前第1/453页 [首页] [上页] 1 2 3 4 5 6 7 8 9 10 [下页] [尾页]
     */

    function subPageCss7() {
        $query = $this->get_query_string("p");
        if ($query)
            $this->subPage_link = $_SERVER[PHP_SELF] . "?" . $query . "&p=";
        else
            $this->subPage_link = $_SERVER[PHP_SELF] . "?p=";
        $subPageCss2Str = "";
        //$subPageCss2Str.="当前第".$this->current_page."/".$this->pageNums."页 ";


        if ($this->current_page > 1) {
            $firstPageUrl = $this->subPage_link . "1";
            $prewPageUrl = $this->subPage_link . ($this->current_page - 1);
            $previousNum = $this->current_page - 1;
            $subPageCss2Str.="";
            $subPageCss2Str.="<a id='previous_page' href='javascript:void(0);' onclick='page_jump($previousNum);'  onfocus='this.blur();'>上一页</a> ";
        } else {
            $subPageCss2Str.="";
            $subPageCss2Str.="<a id='previous_page' href='javascript:void(0);'  onfocus='this.blur();'>上一页</a> ";
        }

        $subPageCss2Str.="<strong>" . $this->current_page . "</strong>";

        if ($this->current_page < $this->pageNums) {
            $lastPageUrl = $this->subPage_link . $this->pageNums;
            $nextPageUrl = $this->subPage_link . ($this->current_page + 1);
            $nextNum = $this->current_page + 1;
            $subPageCss2Str.="<a id='next_page' href='javascript:void(0);' onclick='page_jump($nextNum);' onfocus='this.blur();'>下一页</a> ";
        } else {
            $subPageCss2Str.="<a id='next_page' href='javascript:void(0);'  onfocus='this.blur();'>下一页</a> ";
        }
        $subPageCss2Str.="共" . $this->pageNums . "页 第<input id='page_jump' onchange=\"page_jump(document.getElementById('page_jump').value)\" type='text' name='' value='" . $this->current_page . "' size='3' />页";
        $this->url = $subPageCss2Str;
    }

    /*
      构造经典模式的分页
      [首页] [上页] [下页] [尾页]
     */

    public function __toString() {
        return $this->url;
    }

    function get_query_string($var = '', $var2 = '') {
        reset($_POST);
        while (list($key, $value) = each($_POST)) {
            if ($key && $value) {
                $str.=$key . "=" . @urlencode($value) . "&";
            }
        }
        if ($str == "") {
            $str.=$_SERVER[QUERY_STRING]; //如果有表单查询只取表单的变量，否则取链接的参数
        }

        $query = explode("&", $str);
        for ($i = 0; $i < count($query); $i++) {
            $a = explode("=", $query[$i]);
            if ($a[0] != $var && $a[0] != $var2) {
                $string.=$query[$i] . "&";
            }
        }
        return substr($string, 0, -1);
    }

}

?>
